import PortalAPI from '@/api/helpCenter/portals'
import { throwErrorMessage } from '@/store/utils/api'
import { types } from './mutations'
const portalAPIs = new PortalAPI()
export const actions = {
  index: async ({ commit }) => {
    try {
      commit(types.SET_UI_FLAG, { isFetching: true })
      const {
        data: { payload },
      } = await portalAPIs.get()
      commit(types.CLEAR_PORTALS)
      const portalSlugs = payload.map(portal => portal.slug)
      commit(types.ADD_MANY_PORTALS_ENTRY, payload)
      commit(types.ADD_MANY_PORTALS_IDS, portalSlugs)
    } catch (error) {
      throwErrorMessage(error)
    } finally {
      commit(types.SET_UI_FLAG, { isFetching: false })
    }
  },

  show: async ({ commit }, { portalSlug, locale }) => {
    commit(types.SET_UI_FLAG, { isFetchingItem: true })
    try {
      const response = await portalAPIs.getPortal({ portalSlug, locale })
      const {
        data: { meta },
      } = response
      commit(types.SET_PORTALS_META, meta)
    } catch (error) {
      // Ignore error
    } finally {
      commit(types.SET_UI_FLAG, { isFetchingItem: false })
    }
  },

  create: async ({ commit }, params) => {
    commit(types.SET_UI_FLAG, { isCreating: true })
    try {
      const { data } = await portalAPIs.create(params)
      const { slug: portalSlug } = data
      commit(types.ADD_PORTAL_ENTRY, data)
      commit(types.ADD_PORTAL_ID, portalSlug)
    } catch (error) {
      throwErrorMessage(error)
    } finally {
      commit(types.SET_UI_FLAG, { isCreating: false })
    }
  },

  update: async ({ commit }, { portalSlug, ...portalObj }) => {
    commit(types.SET_HELP_PORTAL_UI_FLAG, {
      uiFlags: { isUpdating: true },
      portalSlug,
    })
    try {
      const { data } = await portalAPIs.updatePortal({
        portalSlug,
        portalObj,
      })
      commit(types.UPDATE_PORTAL_ENTRY, data)
    } catch (error) {
      throwErrorMessage(error)
    } finally {
      commit(types.SET_HELP_PORTAL_UI_FLAG, {
        uiFlags: { isUpdating: false },
        portalSlug,
      })
    }
  },

  delete: async ({ commit }, { portalSlug }) => {
    commit(types.SET_HELP_PORTAL_UI_FLAG, {
      uiFlags: { isDeleting: true },
      portalSlug,
    })
    try {
      await portalAPIs.delete(portalSlug)
      commit(types.REMOVE_PORTAL_ENTRY, portalSlug)
      commit(types.REMOVE_PORTAL_ID, portalSlug)
    } catch (error) {
      throwErrorMessage(error)
    } finally {
      commit(types.SET_HELP_PORTAL_UI_FLAG, {
        uiFlags: { isDeleting: false },
        portalSlug,
      })
    }
  },

  updatePortal: async ({ commit }, portal) => {
    commit(types.UPDATE_PORTAL_ENTRY, portal)
  },
}
